home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / StringCompare.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  15KB  |  379 lines

  1. /*
  2.      File:        StringCompare.h
  3.  
  4.      Contains:    Public interfaces for String Comparison and related operations
  5.  
  6.      Version:    Technology:    System 7.0 through System 8
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __STRINGCOMPARE__
  19. #define __STRINGCOMPARE__
  20.  
  21. #ifndef __TYPES__
  22. #include <Types.h>
  23. #endif
  24. #ifndef __TEXTCOMMON__
  25. #include <TextCommon.h>
  26. #endif
  27. #ifndef __SCRIPT__
  28. #include <Script.h>
  29. #endif
  30. #ifndef __TEXTOBJECTS__
  31. #include <TextObjects.h>
  32. #endif
  33. #ifndef __LOCALEOBJECTS__
  34. #include <LocaleObjects.h>
  35. #endif
  36. #ifndef __TEXTPARSER__
  37. #include <TextParser.h>
  38. #endif
  39.  
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43.  
  44. #if PRAGMA_IMPORT_SUPPORTED
  45. #pragma import on
  46. #endif
  47.  
  48. #if PRAGMA_ALIGN_SUPPORTED
  49. #pragma options align=mac68k
  50. #endif
  51.  
  52. /*
  53.  
  54.     Here are the current System 7 routine names and the translations to the older forms.
  55.     Please use the newer forms in all new code and migrate the older names out of existing
  56.     code as maintenance permits.
  57.     
  58.     NEW NAME                    OLD NAME                    OBSOLETE FORM (no handle)
  59.     
  60.     CompareString (Str255)        IUCompPString (hp only)        IUCompString (hp only)
  61.     CompareText (ptr/len)        IUMagPString                IUMagString
  62.     IdenticalString (Str255)    IUEqualPString (hp only)    IUEqualString  (hp only)
  63.     IdenticalText (ptr/len)        IUMagIDPString                IUMagIDString
  64.     LanguageOrder                IULangOrder
  65.     ScriptOrder                    IUScriptOrder
  66.     StringOrder (Str255)        IUStringOrder (hp only)
  67.     TextOrder (ptr/len)            IUTextOrder
  68.  
  69.     RelString
  70.     CmpString (a only)                    
  71.     EqualString (hp only)
  72.     
  73.     ReplaceText
  74.  
  75. */
  76. #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  77.  
  78. enum {
  79.                                                                 /* Special language code values for Language Order*/
  80.     systemCurLang                = -2,                            /* current (itlbLang) lang for system script*/
  81.     systemDefLang                = -3,                            /* default (table) lang for system script*/
  82.     currentCurLang                = -4,                            /* current (itlbLang) lang for current script*/
  83.     currentDefLang                = -5,                            /* default lang for current script*/
  84.     scriptCurLang                = -6,                            /* current (itlbLang) lang for specified script*/
  85.     scriptDefLang                = -7                            /* default language for a specified script*/
  86. };
  87.  
  88. /* obsolete names*/
  89.  
  90. enum {
  91.     iuSystemCurLang                = -2,
  92.     iuSystemDefLang                = -3,
  93.     iuCurrentCurLang            = -4,
  94.     iuCurrentDefLang            = -5,
  95.     iuScriptCurLang                = -6,
  96.     iuScriptDefLang                = -7
  97. };
  98.  
  99. #endif
  100. /* FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE*/
  101. #if FOR_SYSTEM8_PREEMPTIVE
  102. typedef struct OpaqueCollationRef* CollationRef;
  103. typedef const UInt8 *ConstBytePtr;
  104. /* Collation object key names*/
  105. #define kCollateMasterKeyName "\pcollatemaster"
  106. /* Attribute names and values for CreateCollationRef*/
  107. #define kCollateUsageAttributeName "\pcollateusage"
  108. typedef FourCharCode CollateUsageAttributeValue;
  109.  
  110. enum {
  111.     kCollateUsageDictionary        = 'dict',
  112.     kCollateUsagePhoneDirectory    = 'phon'
  113. };
  114.  
  115. #define kCollateIdeoOrderAttributeName "\pcollateideoorder"
  116. typedef FourCharCode CollateIdeoOrderAttributeValue;
  117.  
  118. enum {
  119.     kCollateIdeoOrderRadicalStroke = 'rdst',
  120.     kCollateIdeoOrderStrokeRadical = 'strd'
  121. };
  122.  
  123. /* Override types and enums*/
  124. struct CollationSet {
  125.     CharacterGroup                     charGroup;
  126.     CharacterClass                     charClass;
  127.     CharacterSubclassMask             charSubclassMask;
  128. };
  129. typedef struct CollationSet CollationSet;
  130.  
  131. typedef OptionBits CollateSetOptions;
  132.  
  133. enum {
  134.     kCollateMakeIgnorableBit    = 0,
  135.     kCollateSkipPreprocessingBit = 1,
  136.     kCollateIgnoreAnnotationsBit = 2
  137. };
  138.  
  139.  
  140. enum {
  141.     kCollateMakeIgnorableMask    = 1 << kCollateMakeIgnorableBit,
  142.     kCollateSkipPreprocessingMask = 1 << kCollateSkipPreprocessingBit,
  143.     kCollateIgnoreAnnotationsMask = 1 << kCollateIgnoreAnnotationsBit
  144. };
  145.  
  146. struct CollationSetOptionSpec {
  147.     CharacterGroup                     charGroup;
  148.     CharacterClass                     charClass;
  149.     CharacterSubclassMask             charSubclassMask;
  150.     CollateSetOptions                 options;
  151. };
  152. typedef struct CollationSetOptionSpec CollationSetOptionSpec;
  153.  
  154. typedef OptionBits CollateNumberOptions;
  155.  
  156. enum {
  157.     kCollateNumbersByValueBits    = 0,
  158.     kCollateAllowThousandsSepBits = 2,
  159.     kCollateMoreThousandsSepBit    = 4,
  160.     kCollateAllowIdeoNumbersBit    = 5
  161. };
  162.  
  163.  
  164. enum {
  165.     kCollateNumbersByValueMask    = 3 << kCollateNumbersByValueBits,
  166.     kCollateAllowThousandsSepMask = 3 << kCollateAllowThousandsSepBits,
  167.     kCollateMoreThousandsSepMask = 1 << kCollateMoreThousandsSepBit,
  168.     kCollateAllowIdeoNumbersMask = 1 << kCollateAllowIdeoNumbersBit
  169. };
  170.  
  171.  
  172. enum {
  173.                                                                 /* values for NumbersByValue subfield*/
  174.     kCollateNumbersByValueUseLocale = 0,
  175.     kCollateNumbersByValueNo    = 1,
  176.     kCollateNumbersByValueYes    = 2,                            /* values for AllowThousands subfield*/
  177.     kCollateAllowThousandsUseLocale = 0,
  178.     kCollateAllowThousandsNo    = 1,
  179.     kCollateAllowThousandsYes    = 2,                            /* values for MoreThousands subfield*/
  180.     kCollateMoreThousandsUseLocale = 0,
  181.     kCollateMoreThousandsSkipLocale = 1,                        /* values for AllowIdeoNumbers subfield*/
  182.     kCollateAllowIdeoNumbersNo    = 0,
  183.     kCollateAllowIdeoNumbersYes    = 1
  184. };
  185.  
  186. typedef OptionBits CollateOptions;
  187.  
  188. enum {
  189.     kCollateStandardOptions        = 0
  190. };
  191.  
  192.  
  193. enum {
  194.                                                                 /* For determining equivalence, differences in encoding and between composed*/
  195.                                                                 /* and decomposed characters are ignored (they are always significant for*/
  196.                                                                 /* ordering, however). To change this use the following bits:*/
  197.     kCollateEncodingSensitiveBit = 8,
  198.     kCollateComposeSensitiveBit    = 9,                            /* For determining equivalence, diacritics and case are normally significant.*/
  199.                                                                 /* Use the following bits to change this.*/
  200.     kCollateCaseInsensitiveBit    = 10,
  201.     kCollateDiacriticInsensitiveBit = 11,                        /* The following bits determine the ordering for the NoLocale functions only.*/
  202.     kCollateNoLocaleOrderBits    = 24
  203. };
  204.  
  205.  
  206. enum {
  207.     kCollateEncodingSensitiveMask = 1L << kCollateEncodingSensitiveBit,
  208.     kCollateComposeSensitiveMask = 1L << kCollateComposeSensitiveBit,
  209.     kCollateCaseInsensitiveMask    = 1L << kCollateCaseInsensitiveBit,
  210.     kCollateDiacriticInsensitiveMask = 1L << kCollateDiacriticInsensitiveBit,
  211.     kCollateNoLocaleOrderMask    = 0x0000003F << kCollateNoLocaleOrderBits
  212. };
  213.  
  214.  
  215. enum {
  216.                                                                 /* values for NoLocaleOrder subfield*/
  217.     kCollateMacHFSUnicodeCodeOrder = 0                            /* HFS order for Mac encodings, code order for Unicode*/
  218. };
  219.  
  220. /* collation value for GetCollationKeyForTextString*/
  221. typedef UInt32 CollationValue;
  222. typedef SInt16 CollateResult;
  223. #endif
  224. /* FOR_SYSTEM8_PREEMPTIVE*/
  225. #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  226. /*
  227.  The following functions are old names, but are required for System 7 PowerPC builds
  228.  becuase InterfaceLib exports these names, instead of the new ones.
  229. */
  230. extern pascal short IUMagPString(const void *aPtr, const void *bPtr, short aLen, short bLen, Handle itl2Handle)
  231.  THREEWORDINLINE(0x3F3C, 0x001A, 0xA9ED);
  232.  
  233. extern pascal short IUMagIDPString(const void *aPtr, const void *bPtr, short aLen, short bLen, Handle itl2Handle)
  234.  THREEWORDINLINE(0x3F3C, 0x001C, 0xA9ED);
  235.  
  236. extern pascal short IUTextOrder(const void *aPtr, const void *bPtr, short aLen, short bLen, ScriptCode aScript, ScriptCode bScript, LangCode aLang, LangCode bLang)
  237.  THREEWORDINLINE(0x3F3C, 0x0022, 0xA9ED);
  238.  
  239. extern pascal short IUScriptOrder(ScriptCode script1, ScriptCode script2)
  240.  THREEWORDINLINE(0x3F3C, 0x001E, 0xA9ED);
  241.  
  242. extern pascal short IULangOrder(LangCode language1, LangCode language2)
  243.  THREEWORDINLINE(0x3F3C, 0x0020, 0xA9ED);
  244.  
  245. extern pascal short IUCompPString(ConstStr255Param aStr, ConstStr255Param bStr, Handle itl2Handle);
  246.  
  247. extern pascal short IUEqualPString(ConstStr255Param aStr, ConstStr255Param bStr, Handle itl2Handle);
  248.  
  249. extern pascal short IUStringOrder(ConstStr255Param aStr, ConstStr255Param bStr, ScriptCode aScript, ScriptCode bScript, LangCode aLang, LangCode bLang);
  250.  
  251. /*
  252.  The following are new names which are not exported by System 7 InterfaceLib for PowerPC.
  253.  For C the new names are mapped to the old names using #define.
  254. */
  255. #define CompareString(aStr, bStr, itl2Handle) \
  256.          IUCompPString(aStr, bStr, itl2Handle)
  257. #define CompareText(aPtr, bPtr, aLen, bLen, itl2Handle) \
  258.          IUMagPString(aPtr, bPtr, aLen, bLen, itl2Handle)
  259. #define IdenticalString(aStr, bStr, itl2Handle) \
  260.          IUEqualPString(aStr, bStr, itl2Handle)
  261. #define IdenticalText(aPtr, bPtr, aLen, bLen, itl2Handle) \
  262.          IUMagIDPString(aPtr, bPtr, aLen, bLen, itl2Handle)
  263. #define StringOrder(aStr, bStr, aScript, bScript, aLang, bLang) \
  264.          IUStringOrder(aStr, bStr, aScript, bScript, aLang, bLang)
  265. #define TextOrder(aPtr, bPtr, aLen, bLen, aScript, bScript, aLang, bLang) \
  266.          IUTextOrder(aPtr, bPtr, aLen, bLen, aScript, bScript, aLang, bLang)
  267. #define LanguageOrder(language1, language2) \
  268.          IULangOrder(language1, language2)
  269. /*
  270.  The following functions are new names that are exported by InterfaceLib
  271.  and work on both 68k and System 7 PowerPC.
  272. */
  273. extern pascal short ScriptOrder(ScriptCode script1, ScriptCode script2)
  274.  THREEWORDINLINE(0x3F3C, 0x001E, 0xA9ED);
  275.  
  276. extern pascal short ReplaceText(Handle baseText, Handle substitutionText, Str15 key)
  277.  FOURWORDINLINE(0x2F3C, 0x820C, 0xFFDC, 0xA8B5);
  278.  
  279. #endif
  280. /* FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE*/
  281. #if FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED
  282. extern pascal short IUMagString(const void *aPtr, const void *bPtr, short aLen, short bLen)
  283.  THREEWORDINLINE(0x3F3C, 0x000A, 0xA9ED);
  284.  
  285. extern pascal short IUMagIDString(const void *aPtr, const void *bPtr, short aLen, short bLen)
  286.  THREEWORDINLINE(0x3F3C, 0x000C, 0xA9ED);
  287.  
  288. extern pascal short IUCompString(ConstStr255Param aStr, ConstStr255Param bStr);
  289.  
  290. extern pascal short IUEqualString(ConstStr255Param aStr, ConstStr255Param bStr);
  291.  
  292. #if CGLUESUPPORTED
  293. #if OLDROUTINENAMES
  294. extern short iucompstring(const char *aStr, const char *bStr);
  295.  
  296. extern short iuequalstring(const char *aStr, const char *bStr);
  297.  
  298. extern short iucomppstring(const char *aStr, const char *bStr, Handle intlHandle);
  299.  
  300. extern short iuequalpstring(const char *aStr, const char *bStr, Handle intlHandle);
  301.  
  302. extern short iustringorder(const char *aStr, const char *bStr, ScriptCode aScript, ScriptCode bScript, LangCode aLang, LangCode bLang);
  303.  
  304. #endif
  305. #endif
  306. #endif
  307. /* FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED*/
  308. #if FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  309. extern pascal short RelString(ConstStr255Param str1, ConstStr255Param str2, Boolean caseSensitive, Boolean diacSensitive);
  310.  
  311. extern pascal Boolean EqualString(ConstStr255Param str1, ConstStr255Param str2, Boolean caseSensitive, Boolean diacSensitive);
  312.  
  313. #if CGLUESUPPORTED
  314. extern short relstring(const char *str1, const char *str2, Boolean caseSensitive, Boolean diacSensitive);
  315.  
  316. extern Boolean equalstring(const char *str1, const char *str2, Boolean caseSensitive, Boolean diacSensitive);
  317.  
  318. #endif
  319. #endif
  320. /* FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE*/
  321. #if FOR_SYSTEM8_PREEMPTIVE
  322. extern OSStatus CreateCollationRef(LocaleObjectRef collMasterObject, LocaleRef locale, ItemCount countPairs, const NameValuePair *pairs, CollationRef *newCollationRef);
  323.  
  324. extern OSStatus ChangeCollationRef(CollationRef collationRef, LocaleObjectRef collMasterObject, LocaleRef locale, ItemCount countPairs, const NameValuePair *pairs);
  325.  
  326. extern OSStatus OverrideCollationSetOrder(CollationRef collationRef, ItemCount setCount, CollationSet setList[]);
  327.  
  328. extern OSStatus OverrideCollationSetOptions(CollationRef collationRef, ItemCount specCount, CollationSetOptionSpec specList[]);
  329.  
  330. extern OSStatus OverrideCollationNumberHandling(CollationRef collationRef, CollateNumberOptions numberOptions, ItemCount tokenCount, BasicToken tokenList[]);
  331.  
  332. extern OSStatus DisposeCollationRef(CollationRef *collationRef);
  333.  
  334. extern OSStatus GetCollationKeyForTextObject(CollationRef collationRef, ConstTextObject textObject, CollateOptions options, ItemCount maxCollationValues, ItemCount *actualCollationValues, CollationValue collationKey[]);
  335.  
  336. extern OSStatus GetCollationKeyForTextString(CollationRef collationRef, ConstBytePtr textPtr, ByteCount textLength, TextEncoding textEncoding, CollateOptions options, ItemCount maxCollationValues, ItemCount *actualCollationValues, CollationValue collationKey[]);
  337.  
  338. extern OSStatus CollateTextObjects(CollationRef collationRef, ConstTextObject textObject1, ConstTextObject textObject2, CollateOptions options, CollateResult *weakOrder, CollateResult *strictOrder);
  339.  
  340. extern OSStatus CollateTextStrings(CollationRef collationRef, ConstBytePtr textPtr1, ByteCount textLength1, TextEncoding textEncoding1, ConstBytePtr textPtr2, ByteCount textLength2, TextEncoding textEncoding2, CollateOptions options, CollateResult *weakOrder, CollateResult *strictOrder);
  341.  
  342. extern OSStatus EquivalentTextObjects(CollationRef collationRef, ConstTextObject textObject1, ConstTextObject textObject2, CollateOptions options, Boolean *equivalent);
  343.  
  344. extern OSStatus EquivalentTextStrings(CollationRef collationRef, ConstBytePtr textPtr1, ByteCount textLength1, TextEncoding textEncoding1, ConstBytePtr textPtr2, ByteCount textLength2, TextEncoding textEncoding2, CollateOptions options, Boolean *equivalent);
  345.  
  346. extern OSStatus FindInTextObject(CollationRef collationRef, ConstTextObject baseText, TextObjectIndex baseStartIndex, TextObjectIndex baseEndIndex, ConstTextObject pattern, TextObjectIndex patStartIndex, TextObjectIndex patEndIndex, CollateOptions options, TextObjectIndex *foundStartIndex, TextObjectIndex *foundEndIndex);
  347.  
  348. extern OSStatus FindInTextString(CollationRef collationRef, ConstBytePtr baseText, ByteCount baseLength, TextEncoding baseEncoding, ByteOffset baseStartIndex, ByteOffset baseEndIndex, ConstBytePtr patText, ByteCount patLength, TextEncoding patEncoding, ByteOffset patStartIndex, ByteOffset patEndIndex, CollateOptions options, ByteOffset *foundStartIndex, ByteOffset *foundEndIndex);
  349.  
  350. extern OSStatus SubstituteInTextObject(CollationRef collationRef, TextObject baseText, TextObjectIndex startIndex, TextObjectIndex endIndex, ConstTextObject substText, ConstTextObject pattern, CollateOptions options);
  351.  
  352. /*
  353.  Locale-insensitive utilities for text objects
  354.  For internal, user-invisible behavior thay must remain invariant across different systems
  355. */
  356. extern OSStatus CollateTextObjectsNoLocale(ConstTextObject textObject1, ConstTextObject textObject2, CollateOptions options, CollateResult *weakOrder, CollateResult *strictOrder);
  357.  
  358. extern OSStatus EquivalentTextObjectsNoLocale(ConstTextObject textObject1, ConstTextObject textObject2, CollateOptions options, Boolean *equivalent);
  359.  
  360. extern OSStatus FindInTextObjectNoLocale(ConstTextObject baseText, TextObjectIndex baseStartIndex, TextObjectIndex baseEndIndex, ConstTextObject pattern, TextObjectIndex patStartIndex, TextObjectIndex patEndIndex, CollateOptions options, TextObjectIndex *foundStartIndex, TextObjectIndex *foundEndIndex);
  361.  
  362. #endif
  363. /* FOR_SYSTEM8_PREEMPTIVE*/
  364.  
  365. #if PRAGMA_ALIGN_SUPPORTED
  366. #pragma options align=reset
  367. #endif
  368.  
  369. #if PRAGMA_IMPORT_SUPPORTED
  370. #pragma import off
  371. #endif
  372.  
  373. #ifdef __cplusplus
  374. }
  375. #endif
  376.  
  377. #endif /* __STRINGCOMPARE__ */
  378.  
  379.